package com.ruoyi.web.controller.phonecase;

import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.ImageUrlUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.config.ServerConfig;
import com.ruoyi.system.domain.PcTemplate;
import com.ruoyi.system.domain.PcUserGallery;
import com.ruoyi.system.domain.PcPlatformGallery;
import com.ruoyi.system.domain.PcForumPost;
import com.ruoyi.system.service.IPcTemplateService;
import com.ruoyi.system.service.IPcUserGalleryService;
import com.ruoyi.system.service.IPcPlatformGalleryService;
import com.ruoyi.system.service.IPcForumPostService;

/**
 * 手机客户端App接口Controller
 * 统一处理App端的接口请求，并自动转换图片地址为完整URL
 * 
 * @author ruoyi
 */
@RestController
@RequestMapping("/phonecase")
public class PcAppController extends BaseController
{
    @Autowired
    private IPcTemplateService pcTemplateService;

    @Autowired
    private IPcUserGalleryService pcUserGalleryService;

    @Autowired
    private IPcPlatformGalleryService pcPlatformGalleryService;

    @Autowired
    private IPcForumPostService pcForumPostService;

    @Autowired
    private ServerConfig serverConfig;

    /**
     * 获取模板列表（APP端使用）
     * 路径：/phonecase/template/app/list
     */
    @GetMapping("/template/app/list")
    public AjaxResult getTemplateList(PcTemplate pcTemplate)
    {
        pcTemplate.setStatus("0"); // 只查询正常状态的模板
        List<PcTemplate> list = pcTemplateService.selectPcTemplateList(pcTemplate);
        // 处理图片地址，转换为完整URL
        String baseUrl = serverConfig.getUrl();
        for (PcTemplate template : list)
        {
            if (template.getTemplateImage() != null)
            {
                template.setTemplateImage(ImageUrlUtils.getFullImageUrl(template.getTemplateImage(), baseUrl));
            }
        }
        return success(list);
    }

    /**
     * 获取我的图片库列表（APP端使用）
     * 路径：/phonecase/gallery/my/list
     */
    @GetMapping("/gallery/my/list")
    public AjaxResult getMyGalleryList(PcUserGallery pcUserGallery)
    {
        // 只查询当前用户的图片
        pcUserGallery.setUserId(getUserId());
        pcUserGallery.setStatus("0"); // 只查询正常状态的图片
        List<PcUserGallery> list = pcUserGalleryService.selectPcUserGalleryList(pcUserGallery);
        // 处理图片地址，转换为完整URL
        String baseUrl = serverConfig.getUrl();
        for (PcUserGallery gallery : list)
        {
            if (gallery.getImageUrl() != null)
            {
                gallery.setImageUrl(ImageUrlUtils.getFullImageUrl(gallery.getImageUrl(), baseUrl));
            }
        }
        return success(list);
    }

    /**
     * 获取平台画廊列表（APP端使用）
     * 路径：/phonecase/gallery/platform/list
     */
    @GetMapping("/gallery/platform/list")
    public AjaxResult getPlatformGalleryList(PcPlatformGallery pcPlatformGallery)
    {
        pcPlatformGallery.setStatus("0"); // 只查询正常状态的图片
        List<PcPlatformGallery> list = pcPlatformGalleryService.selectPcPlatformGalleryList(pcPlatformGallery);
        // 处理图片地址，转换为完整URL
        String baseUrl = serverConfig.getUrl();
        for (PcPlatformGallery gallery : list)
        {
            if (gallery.getImageUrl() != null)
            {
                gallery.setImageUrl(ImageUrlUtils.getFullImageUrl(gallery.getImageUrl(), baseUrl));
            }
        }
        return success(list);
    }

    /**
     * 获取论坛帖子列表（APP端使用）
     * 路径：/phonecase/forum/post/list
     */
    @GetMapping("/forum/post/list")
    public AjaxResult getForumPostList(PcForumPost pcForumPost)
    {
        pcForumPost.setStatus("0"); // 只查询正常状态的帖子
        List<PcForumPost> list = pcForumPostService.selectPcForumPostList(pcForumPost);
        // 处理图片地址，转换为完整URL
        String baseUrl = serverConfig.getUrl();
        for (PcForumPost post : list)
        {
            // 处理 postImages JSON 数组
            if (StringUtils.isNotEmpty(post.getPostImages()))
            {
                try
                {
                    JSONArray imageArray = JSON.parseArray(post.getPostImages());
                    for (int i = 0; i < imageArray.size(); i++)
                    {
                        String imageUrl = imageArray.getString(i);
                        if (StringUtils.isNotEmpty(imageUrl))
                        {
                            imageArray.set(i, ImageUrlUtils.getFullImageUrl(imageUrl, baseUrl));
                        }
                    }
                    post.setPostImages(imageArray.toJSONString());
                }
                catch (Exception e)
                {
                    // JSON 解析失败，忽略
                }
            }
        }
        return success(list);
    }

    /**
     * 获取帖子详情（APP端使用）
     * 路径：/phonecase/forum/post/{postId}
     */
    @GetMapping("/forum/post/{postId}")
    public AjaxResult getForumPostDetail(@PathVariable("postId") Long postId)
    {
        PcForumPost post = pcForumPostService.selectPcForumPostByPostId(postId);
        if (post != null)
        {
            // 处理图片地址，转换为完整URL
            String baseUrl = serverConfig.getUrl();
            // 处理 postImages JSON 数组
            if (StringUtils.isNotEmpty(post.getPostImages()))
            {
                try
                {
                    JSONArray imageArray = JSON.parseArray(post.getPostImages());
                    for (int i = 0; i < imageArray.size(); i++)
                    {
                        String imageUrl = imageArray.getString(i);
                        if (StringUtils.isNotEmpty(imageUrl))
                        {
                            imageArray.set(i, ImageUrlUtils.getFullImageUrl(imageUrl, baseUrl));
                        }
                    }
                    post.setPostImages(imageArray.toJSONString());
                }
                catch (Exception e)
                {
                    // JSON 解析失败，忽略
                }
            }
        }
        return success(post);
    }

    /**
     * 发布帖子（APP端使用）
     * 路径：/phonecase/forum/post
     */
    @PostMapping("/forum/post")
    public AjaxResult publishPost(@RequestBody Map<String, Object> requestData)
    {
        PcForumPost pcForumPost = new PcForumPost();
        
        // 设置基本字段
        if (requestData.containsKey("postTitle"))
        {
            pcForumPost.setPostTitle((String) requestData.get("postTitle"));
        }
        if (requestData.containsKey("postContent"))
        {
            pcForumPost.setPostContent((String) requestData.get("postContent"));
        }
        
        // 处理 postImages，前端传的是数组，需要转换为 JSON 字符串
        if (requestData.containsKey("postImages"))
        {
            Object postImagesObj = requestData.get("postImages");
            if (postImagesObj != null)
            {
                if (postImagesObj instanceof List)
                {
                    // 如果是数组，转换为 JSON 字符串
                    List<?> imageList = (List<?>) postImagesObj;
                    JSONArray imageArray = new JSONArray();
                    for (Object img : imageList)
                    {
                        imageArray.add(img);
                    }
                    pcForumPost.setPostImages(imageArray.toJSONString());
                }
                else if (postImagesObj instanceof String)
                {
                    // 如果已经是字符串，直接使用
                    pcForumPost.setPostImages((String) postImagesObj);
                }
            }
        }
        else
        {
            // 如果没有图片，设置为空 JSON 数组
            pcForumPost.setPostImages("[]");
        }
        
        // 设置用户ID（从当前登录用户获取）
        pcForumPost.setUserId(getUserId());
        // 设置默认值
        pcForumPost.setViewCount(0);
        pcForumPost.setReplyCount(0);
        pcForumPost.setLikeCount(0);
        pcForumPost.setIsTop("0");
        pcForumPost.setIsHot("0");
        pcForumPost.setStatus("0");
        
        int result = pcForumPostService.insertPcForumPost(pcForumPost);
        return toAjax(result);
    }
}

